package com.doit.day01;

import redis.clients.jedis.Jedis;

import java.util.Random;
import java.util.Scanner;

/**
 * 需求：使用redis模拟手机验证码发送，验证码有效期60s，
 * 验证验证码输入不能超过3次，超过3次今天就没机会了
 * 1.先验证是不是手机号
 * 2.如果是手机号 发送验证码  如果不是呢？请重新输入
 * 3.发送完验证码之后，要将验证码存到redis中，还要设置过期时间
 * 4.自己输入验证码
 * 5.拿自己输入的验证码和redis中获取过来的验证码进行比对
 * 6.正确   进入页面   如果失败，重新输入有3次机会
 */
public class _02_手机验证码练习 {
    public static void main(String[] args) {

        Jedis jedis = new Jedis("linux01", 6379);

        System.out.println("在一个夜黑风高的夜晚，鸣哥打开手机浏览小网站了，需要输入验证码了！！！");
        System.out.println("欢迎来到****网站，请输入您的手机号：");
        //键盘录入手机号
        Scanner sc = new Scanner(System.in);
        String phone = sc.next();

        String regex = "^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";

        boolean flag = phone.matches(regex);

        if (flag){
            String code = getCode();
            System.out.println("验证码已发送至您的手机，60s内有效，请查收，验证码是："+code);
            //将手机号和验证码绑定后写入到redis中，并且设置过期时间为60s
            jedis.setex(phone,60,code);

            int cnt = 3;
            while (cnt > 0){
                //输入自己的验证码
                System.out.println("请输入您的验证码：");
                //键盘录入你输入的验证码
                String yourCode = sc.next();
                //用自己输入的验证码和redis中的验证码
                if(yourCode.equals(jedis.get(phone))){
                    System.out.println("欢迎来到男人的天堂");
                    return;
                }else {
                    cnt --;
                    if (cnt >0){
                        System.out.println("验证码不正确，你还有次机会"+cnt+"请重新输入");
                    }else {
                        System.out.println("滚，验证码都输入不对！！！！");
                    }
                }
            }
        }else {
            System.out.println("手机号都输入不对，还想看电影？？？滚！！！");
        }
    }

    //写一个方法，生成一个验证码
    public static String getCode(){
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            int num = random.nextInt(10);
            sb.append(num);
        }
        return sb.toString();
    }
}
